/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import io.AgendaDTO;
import java.sql.*;
import java.util.ArrayList;

/**
 * Esta clase representa al gestor de la Agenda que se encuentra
 * almacenada en la base de datos.
 * @author Nahuel
 */
public class MySQLAgendaDAO {

    /**
     * Este método devuelve una lista con todas los contactos almacenados
     * @return lista de agenda
     * @throws DAOException excepción de la capa DAO del sistema
     */
    public ArrayList<AgendaDTO> listarAgenda() throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();
            ResultSet rs = stat.executeQuery("select * from agenda");
            ArrayList<AgendaDTO> lista = new ArrayList();
            while (rs.next()) {
                AgendaDTO agenda = new AgendaDTO(Integer.parseInt(rs.getString("id")), rs.getString("nombre"), rs.getString("apellido"), rs.getString("direccion"), rs.getString("telefono"), rs.getString("email"), rs.getString("observaciones"));
                lista.add(agenda);
            }
            rs.close();
            return lista;
        } catch (SQLException e) {
            throw new DAOException("Error al leer los contactos de la agenda desde la base de datos", e);
        } finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }

    /**
     * Este mensaje permite insertar una nueva entrada en la agenda
     * @param nombre
     * @param apellido
     * @param direccion
     * @param telefono
     * @param email
     * @param observaciones
     * @throws DAOException 
     */
    public void insertarAgenda(AgendaDTO agenda) throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();
            stat.executeUpdate("insert into agenda (nombre,apellido,direccion,telefono,email,observaciones) values ('" + agenda.getNombre() + "','" + agenda.getApellido() + "','" + agenda.getDireccion() + "','" + agenda.getTelefono() + "','" + agenda.getEmail() + "','" + agenda.getObservaciones() + "')");
        } catch (SQLException e) {
            throw new DAOException("Error al insertar el contacto en la base de datos", e);
        } finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }

    /**
     * Este método permite borrar una entrada de la agenda
     * @param id
     * @return true si fue exitoso y false si la entrada en la agenda no existe
     * @throws DAOException 
     */
    public boolean borrarAgenda(int id) throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();
            if (stat.executeUpdate("delete from agenda where id = '" + id + "'") == 0) {
                return false;
            } else {
                return true;
            }
        } catch (SQLException e) {
            throw new DAOException("Error al borrar el contacto de la base de datos", e);
        } finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }

    /**
     * Este mensaje permite modificar los datos de una entrada de agenda
     * @param id
     * @param nombre
     * @param apellido
     * @param direccion
     * @param telefono
     * @param email
     * @param observaciones
     * @throws DAOException 
     */
    public void actualizarAgenda(AgendaDTO agenda) throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();
            stat.executeUpdate("update agenda set nombre = '" + agenda.getNombre() + "',apellido = '" + agenda.getApellido() + "',direccion = '" + agenda.getDireccion() + "',telefono = '" + agenda.getTelefono() + "',email = '" + agenda.getEmail() + "',observaciones = '" + agenda.getObservaciones() + "' where id = " + agenda.getId());
        } catch (SQLException e) {
            throw new DAOException("Error al actualizar el contacto en la base de datos", e);
        } finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }

    /**
     * Este mensaje permite obtener una lista de contactos de la agenda que
     * contengan en sus atributos a los que contiene la agenda que se pasa como
     * parámetro
     * @param agenda
     * @return lista de agendas
     * @throws DAOException 
     */
    public ArrayList<AgendaDTO> buscarAgenda(AgendaDTO agenda) throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();
            ResultSet rs = stat.executeQuery("select * from agenda where lower(nombre) like lower('%" + agenda.getNombre() + "%') and lower(apellido) like lower('%" + agenda.getApellido() + "%') and lower(direccion) like lower('%" + agenda.getDireccion() + "%') and lower(telefono) like lower('%" + agenda.getTelefono() + "%') and lower(email) like lower('%" + agenda.getEmail() + "%') and lower(observaciones) like lower('%" + agenda.getObservaciones() + "%')");

            ArrayList<AgendaDTO> lista = new ArrayList();
            while (rs.next()) {
                AgendaDTO agendaDTO = new AgendaDTO(Integer.parseInt(rs.getString("id")), rs.getString("nombre"), rs.getString("apellido"), rs.getString("direccion"), rs.getString("telefono"), rs.getString("email"), rs.getString("observaciones"));
                lista.add(agendaDTO);
            }
            rs.close();
            return lista;
        } catch (SQLException e) {
            throw new DAOException("Error al leer los contactos de la agenda desde la base de datos", e);
        } finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }
}
